package fr.auzaiphe.admin.bdd;

import java.sql.ResultSet;
import java.sql.SQLException;

import fr.auzaiphe.admin.model.Alerte;
import fr.auzaiphe.admin.model.ChronoGeneral;
import fr.auzaiphe.admin.model.SousChrono;

public class AlerteBDD {
	
	private BaseDeDonnee bdd;	// Pour l'intéraction avec l'alerte
	//private int id;				// ID du l'alerte dans la base
	private Alerte imageAlerte; // Image de l'alerte dans l'application
	
	/**
	 * Constructeur pincipale
	 * @param pBdd
	 * @param pImageAlerte Image de l'Alerte de l'application
	 */
	public AlerteBDD(BaseDeDonnee pBdd, Alerte pImageAlerte)
	{
		this.imageAlerte = pImageAlerte;
		this.bdd = pBdd;
		//this.id = -1;

		this.sauvegarde();
	}
	
	/**
	 * heure d'activation de l'alerte pour l'historique
	 * @param temps en seconds
	 */
	public void evtAlerte(int temps)
	{
		String requete;
		
		requete = "INSERT INTO EVT_ALERTE_ID(" +
				"ALERTE_ID," +
				"HEURE" +
				") VALUES(" +
				"'"+ this.imageAlerte.getId()+"'," +
				"'"+ temps +"');";
		try
		{
			this.bdd.executerUpdate(requete);
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
	}
	
	
	/**
	 * Sauvegarde l'alerte dans la base de donnée
	 */
	public void sauvegarde() {
		
		String requete; 
		
		if (this.imageAlerte.getId() == -1)
		{
			requete = "INSERT INTO ALERTE("; 
					
					if(this.imageAlerte.getCible() != null)
					{
						requete = requete + "JOUEUR_ID,";
					}
					requete = requete + "CIBLE_ALL, "+
					"CIBLE_ADMIN,"+
					"ALERTE_HEURE_AFFICHE," +
					"ACTIVATION," +
					"ALERTE_TITRE," +
					"ALERTE_TEXTE," +
					"ALERTE_LIEN_FICHIER " +
					") VALUES(";
					
					if(this.imageAlerte.getCible() != null)
					{
						requete = requete + "'"+ this.imageAlerte.getCible().getId() +"',";
					}
					requete = requete + "'"+ ( this.imageAlerte.isTargetingAll()? 1 : 0 ) +"'," +
					"'"+ ( this.imageAlerte.isTargetingAdmin()? 1 : 0 ) +"'," +
					"'"+ this.imageAlerte.getHeureAffiche() +"'," +
					"'";
					if( this.imageAlerte.getChronoCible() instanceof ChronoGeneral)
						requete += -1;
					else
						requete += ((SousChrono)this.imageAlerte.getChronoCible()).getJoueur().getId();
					requete += "'," +
					"'"+ this.imageAlerte.getTitre().replace('\'','’') +"'," +
					"'"+ this.imageAlerte.getTexte().replace('\'','’') +"'," +
					"'"+ this.imageAlerte.getLienFichier().replace('\'','’') +"'" +
					");";
					
					//System.out.println(this.imageAlerte.getTitre().replaceAll("'", "\\\u0027"));
					//'all_quoted=true;
					//  \\\\u0027   u2019
			try
			{
				this.bdd.executerUpdate(requete);
				// Recupération de l'id d'ajout du champ
				ResultSet resultat = this.bdd.executerRequete("CALL IDENTITY()");
				resultat.next();
				this.imageAlerte.setId(resultat.getInt(1));
			}
			catch (SQLException e)
			{
				e.printStackTrace();
			}


		}
		else
		{
			
			requete ="UPDATE ALERTE SET ";
			if(this.imageAlerte.getCible() != null)
			{
				requete = requete +"JOUEUR_ID='"+this.imageAlerte.getCible().getId() +"',";
			}
			requete = requete +
			"CIBLE_ALL='"+ ( this.imageAlerte.isTargetingAll()? 1 : 0 )  +"'," +
			"CIBLE_ADMIN='"+ ( this.imageAlerte.isTargetingAdmin()? 1 : 0 ) +"'," +
			"ALERTE_HEURE_AFFICHE='"+this.imageAlerte.getHeureAffiche() +"',"+
			"ACTIVATION='";
			if( this.imageAlerte.getChronoCible() instanceof ChronoGeneral)
				requete += -1;
			else
				requete += ((SousChrono)this.imageAlerte.getChronoCible()).getJoueur().getId();
			requete += "',"+
			"ALERTE_TITRE='"+this.imageAlerte.getTitre().replace('\'','’')+"',"+
			"ALERTE_TEXTE='"+this.imageAlerte.getTexte().replace('\'','’') +"',"+
			"ALERTE_LIEN_FICHIER='"+this.imageAlerte.getLienFichier().replace('\'','’')+"' "+
			"WHERE ALERTE_ID="+this.imageAlerte.getId()+";";

			try
			{
				this.bdd.executerUpdate(requete);
			}
			catch (SQLException e)
			{
				e.printStackTrace();
			}
			
			
		}
		
	}
	/**
	 * Supprimer l'alerte dans la base de donnée
	 */
	public void supprimer()
	{
		String requeteUser1 = "DELETE FROM ALERTE WHERE ALERTE_ID = '"+ this.imageAlerte.getId() +"';";
	
		try
		{
			this.bdd.executerUpdate(requeteUser1);
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
	}

	/**
	 * Affiche l'alerte en console
	 */	
	public void afficher() {
			System.out.println("-----------------------------------------------------------------------------");
			System.out.println("id\t\t"+this.imageAlerte.getId());
			System.out.println("ALERTE_HEURE_AFFICHE\t"+this.imageAlerte.getHeureAffiche());
			System.out.println("ALERTE_TEXTE\t\t"+this.imageAlerte.getTexte());
			System.out.println("ALERTE_LIEN_FICHIER\t"+this.imageAlerte.getLienFichier());
			System.out.println("-----------------------------------------------------------------------------");
	}
	
}
	



